#include "jsonprocessor.h"
#include <QFile>
#include <QDebug>
#include <QDir>
#include <QTextStream>

bool JsonProcessor::processJsonToTxt(const QString& inputPath, const QString& outputPath, const QStringList& keywords) {
    try {
        // 读取JSON文件
        QFile inputFile(inputPath);
        if (!inputFile.open(QIODevice::ReadOnly)) {
            qDebug() << "无法打开输入文件:" << inputPath;
            return false;
        }

        // 解析JSON
        QByteArray jsonData = inputFile.readAll();
        inputFile.close();

        QJsonDocument doc = QJsonDocument::fromJson(jsonData);
        if (doc.isNull()) {
            qDebug() << "JSON解析失败";
            return false;
        }

        // 确保输出目录存在
        QDir().mkpath(QFileInfo(outputPath).path());

        // 提取会话内容
        QStringList conversations = extractConversations(doc.array(), keywords);

        // 写入TXT文件
        QFile outputFile(outputPath);
        if (!outputFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
            qDebug() << "无法创建输出文件:" << outputPath;
            return false;
        }

        QTextStream out(&outputFile);
        for (const QString& line : conversations) {
            out << line << "\n";
        }
        outputFile.close();

        qDebug() << "JSON文件处理完成，已保存到:" << outputPath;
        return true;
    } catch (const std::exception& e) {
        qDebug() << "处理JSON文件时发生错误:" << e.what();
        return false;
    }
}

QStringList JsonProcessor::extractConversations(const QJsonArray& jsonArray, const QStringList& keywords) {
    QStringList result;
    
    // 如果没有关键词，则提取所有内容
    bool extractAll = keywords.isEmpty();
    
    for (const QJsonValue& value : jsonArray) {
        QJsonObject item = value.toObject();
        QJsonArray conversations = item["conversations"].toArray();
        
        // 检查这个会话是否包含特定字符串
        bool containsKeyword = extractAll;  // 如果没有关键词，默认为true
        if (!extractAll) {
            for (const QJsonValue& conv : conversations) {
                QJsonObject convObj = conv.toObject();
                QString text = convObj["value"].toString();
                
                // 检查是否包含任意一个关键词
                for (const QString& keyword : keywords) {
                    if (text.contains(keyword)) {
                        containsKeyword = true;
                        qDebug() << "找到包含关键词" << keyword << "的内容";
                        break;
                    }
                }
                if (containsKeyword) break;
            }
        }
        
        // 如果包含特定字符串或没有关键词，则添加这个会话的所有内容
        if (containsKeyword) {
            for (const QJsonValue& conv : conversations) {
                QJsonObject convObj = conv.toObject();
                result.append(convObj["value"].toString());
            }
            qDebug() << "添加会话，ID:" << item["id"].toInt();
        }
    }
    return result;
} 